package com.hyy.advice;


import com.hyy.common.exception.BlogException;
import com.hyy.common.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@RestControllerAdvice
public class UserServiceExceptionAdvice {
    /**
     * 处理所有未被单独捕获的通用异常，返回失败结果和异常信息
     */
    @ExceptionHandler
    public Result handler(Exception e){
        log.error("发生异常, e: {}", e);
        return Result.fail(e.getMessage());
    }
    /**
     * 处理自定义的BlogException异常，返回失败结果和异常信息
     */
    @ExceptionHandler
    public Result handler(BlogException e){
        log.error("发生异常, e: {}", e);
        return Result.fail(e.getMessage());
    }
    /**
     * 处理参数校验失败异常，提取校验错误信息并返回给前端
     */
    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public Result verifyHandle(Exception e){
        log.error("参数校验失败: {}", e.getMessage());
        MethodArgumentNotValidException exception = (MethodArgumentNotValidException) e;

        //未做判空处理
        String errMes = exception.getBindingResult().getFieldError().getDefaultMessage();

        return Result.fail("参数校验失败 ："+errMes);
    }
}
